home *** CD-ROM | disk | FTP | other *** search
/ Power CD / Power CD ATARI-Rechner Lieben.iso / DEMOS / HM2_DEMO / BSP / FRACTAL.M < prev    next >
Encoding:
Text File  |  1992-11-20  |  1.8 KB  |  84 lines

  1. MODULE Fractal;
  2.  
  3.     IMPORT appl, graf, VDI, v;
  4.  
  5.     CONST
  6.         Xreso = 100;
  7.         Yreso = 100;
  8.  
  9.     VAR
  10.         Handle: SHORTINT;
  11.  
  12.  
  13.     PROCEDURE InitVDI;
  14.         TYPE
  15.             tIn = ARRAY [0..10] OF SHORTINT;
  16.         VAR
  17.             dmy: SHORTINT;
  18.             In : tIn;
  19.             Out : ARRAY[0..127] OF SHORTINT;
  20.     BEGIN
  21.         Handle := graf.handle (dmy, dmy, dmy, dmy);
  22.         In := tIn{1 BY 10, 2};
  23.         v.opnvwk (In, Handle, Out);
  24.         v.hidec (Handle);
  25.         v.clrwk (Handle);
  26.     END InitVDI;
  27.  
  28.  
  29.     PROCEDURE ExitVDI;
  30.     BEGIN
  31.         v.showc (Handle, FALSE);
  32.         v.clsvwk(Handle);
  33.     END ExitVDI;
  34.  
  35.  
  36.     PROCEDURE Draw (Realmin, Realmax, Imagmin, Imagmax: LONGREAL; Maxzahl: CARDINAL);
  37.         TYPE
  38.             tPoint = ARRAY [0..0] OF VDI.tPoint;
  39.         VAR
  40.             Realdelta, Imagdelta: LONGREAL;
  41.             Realconst, Imagconst: LONGREAL;
  42.             Realzahl, Imagzahl: LONGREAL;
  43.             Realquad, Imagquad: LONGREAL;
  44.             Xkoor, Ykoor, Zaehler: SHORTCARD;
  45.             Point: tPoint;
  46.     BEGIN
  47.         Realdelta := (Realmax-Realmin)/FLOAT (Xreso);
  48.         Imagdelta := (Imagmax-Imagmin)/FLOAT (Yreso);
  49.         Imagconst := Imagmin + Imagdelta;
  50.  
  51.         FOR Ykoor := 0 TO Yreso DO
  52.             Imagconst := Imagconst + Imagdelta;
  53.             Realconst := Realmin - Realdelta;
  54.             FOR Xkoor := 0 TO Xreso DO
  55.                 Realconst := Realconst + Realdelta;
  56.                 Realzahl := Realconst;
  57.                 Imagzahl := Imagconst;
  58.                 Zaehler := Maxzahl;
  59.                 LOOP
  60.                     Realquad := Realzahl * Realzahl;
  61.                     Imagquad := Imagzahl * Imagzahl;
  62.                     IF Realquad + Imagquad > 4.0 THEN EXIT END;
  63.                     Imagzahl := Realzahl * Imagzahl * 2.0 + Imagconst;
  64.                     Realzahl := Realquad - Imagquad + Realconst;
  65.                     Zaehler := Zaehler - 1;
  66.                     IF Zaehler = 0 THEN EXIT END;
  67.                 END;
  68.                 IF (Zaehler MOD 2) = 0 THEN
  69.                     Point := tPoint{{Xkoor, Ykoor}};
  70.                     v.pmarker (Handle, 1, Point);
  71.                 END;
  72.             END;
  73.         END;
  74.     END Draw;
  75.  
  76. BEGIN
  77.     IF appl.init () >= 0 THEN
  78.         InitVDI;
  79.         Draw (-2.0, 1.2, -1.25, 1.25, 23);
  80.         ExitVDI;
  81.         appl.exit
  82.     END;
  83. END Fractal. 
  84.         
  85.     
  86.